# 使用 OpenAI API 的最佳提示工程实践

本文是根据[OpenAI最佳提示工程](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api)指南的翻译版本，内容为机器翻译。

如何给 OpenAI 模型提供清晰有效的指示

## 提示工程的工作原理

由于 OpenAI 模型的训练方式，某些特定的提示格式效果尤为显著，会导致更有用的模型输出。OpenAI 的官方提示工程指南通常是起步的最佳选择。

以下是一些我们认为效果很好的提示格式，但请随意探索不同的格式，可能有更适合您任务的格式。

## 经验法则和例子

注意：“{文本输入在此}”是实际文本/上下文的占位符

### 1. 使用最新型号

为获得最佳效果，我们通常建议使用最新、功能最强大的型号。较新的模型往往更容易进行提示工程。

### 2. 将指示放在提示的开头，并使用 ### 或 “”“ 将指令和上下文分开

效果❌较差：

```
将下面的文本总结为最重要的要点的项目符号列表。

{text input here}
```

更好 ✅ ：

```
将下面的文本总结为最重要的要点的项目符号列表。

文本: """
{text input here}
"""
```

### 3. 具体、描述性并尽可能详细地描述所需的背景、结果、长度、格式、风格等

具体说明背景、结果、长度、格式、风格等。

效果❌较差：

```
写一首关于OpenAI的诗。
```

更好 ✅ ：

```
写一首鼓舞人心的关于OpenAI的短诗，着重介绍最近的DALL-E产品发布（DALL-E是一种文本到图像的ML模型），以某位{著名诗人}的风格。
```

### 4. 通过示例阐明所需的输出格式

效果❌较差：

```
提取下面文本中提到的实体。提取以下4种实体类型：公司名称、人名、具体主题和主题。

文本: {text}
```

显示和说明 - 当显示特定的格式要求时，模型的响应会更好。这也使得以编程方式可靠地解析出多个输出变得更加容易。

更好 ✅ ：

```
提取下面文本中提到的重要实体。首先提取所有公司名称，然后提取所有人名，接着提取适合内容的具体主题，最后提取一般的主题。

期望的格式：
公司名称: <逗号分隔的公司名称列表>
人名: -||-
具体主题: -||-
一般主题: -||-

文本: {text}
```

### 5. 从零镜头开始，然后是少镜头，它们都不起作用，然后微调

✅ 零射

```
从下面的文本中提取关键词。

文本: {text}

关键词:
```

✅ 少镜头 - 提供几个例子

```
从以下文本中提取关键词。

文本 1: Stripe提供API，供Web开发人员将支付处理集成到他们的网站和移动应用程序中。
关键词 1: Stripe，支付处理，API，Web开发人员，网站，移动应用程序
##
文本 2: OpenAI已经训练出了先进的语言模型，非常擅长理解和生成文本。我们的API提供对这些模型的访问，并可用于解决几乎任何涉及语言处理的任务。
关键词 2: OpenAI，语言模型，文本处理，API。
##
文本 3: {text}
关键词 3:
```

✅ 微调：在这里查看微调的最佳实践。

### 6. 减少“蓬松”和不精确的描述

效果❌较差：

```
对该产品的描述应该相当简短，仅几句话，不要太多。
```

更好 ✅ ：

```
使用3到5个句子段落来描述这个产品。
```

### 7. 与其只说不该做什么，不如说该做什么

效果❌较差：

```
以下是代理和客户之间的对话。不要询问用户名或密码。不要重复。

客户：我无法登录我的账户。
代理：
```

更好 ✅ ：

```
以下是代理和客户之间的对话。代理将试图诊断问题并提出解决方案，同时避免询问与个人身份相关的任何问题。不要询问个人身份信息，如用户名或密码，而是将用户引导至帮助文档www.samplewebsite.com/help/faq

客户：我无法登录我的账户。
代理：
```

### 8. 特定于代码生成 - 使用“引导词”将模型推向特定模式

效果❌较差：

```
# 编写一个简单的Python函数
# 1. 询问我一个英里数
# 2. 将英里转换为公里
```

在下面的代码示例中，向模型添加“import”提示，让它开始用Python编写。（同样，“SELECT”是SQL语句开头的一个很好的提示。

更好 ✅ ：

```
# 编写一个简单的Python函数
# 1. 询问我一个英里数
# 2. 将英里转换为公里
import
```

# 参数

通常，我们发现模型和温度是改变模型输出的最常用参数。

1. 模型 - 性能越高的型号通常越昂贵，延迟也越高。
2. 温度 - 模型输出不太可能的标记的频率的度量。温度越高，输出的随机性（通常是创造性的）就越大。然而，这与“真实性”不同。对于大多数事实用例，例如数据提取和真实问答，温度为0是最佳的。
3. 最大令牌数（最大长度） - 不控制输出的长度，而是令牌生成的硬截止限制。理想情况下，您不会经常达到此限制，因为您的模型会在它认为它已经完成时停止，或者当它到达您定义的停止序列时停止。
4. 停止序列 - 一组字符（标记），生成时将导致文本生成停止。

有关其他参数的说明，请参阅API参考。